package Ordenamiento;
/**
 * @author HugoAlberto si, si estudie el metodo, realiza iteraciones. toma el
 *         mayor y lo divide entre dos y el resultado entre 2 y asi hasta llegar
 *         a uno o 0 usando division entera. despues simplemente a los saltos se
 *         les ordena por insercion y se repite otra vez la division entre dos y
 *         asi......
 */
public class Shell
{
   public int[] ShellSort(int[] pArreglo)
   {
      for(int salto=pArreglo.length/2; salto>0; salto=(salto==2?1: (int)Math.round(salto/2.2)))
      {
         for(int i=salto; i<pArreglo.length; i++)
         {
            for(int j=i; j>=salto&&pArreglo[j-salto]>pArreglo[j]; j-=salto)
            {
               int temp=pArreglo[j];
               pArreglo[j]=pArreglo[j-salto];
               pArreglo[j-salto]=temp;
            }
         }
      }
      return pArreglo;
   }
   // public void imprimir(int[] pArreglo)
   // {
   // /**
   // * @author reynald0 por cierto, excelente metodo :D
   // */
   // System.out.println("================-[Ordenado]");
   // for(int i=0; i<pArreglo.length; i++)
   // System.out.printf(" %d |",pArreglo[i]);
   // }
}
